/*
UDP协议中文名称是用户数据报协议，是OSI（开放式系统互联）参考模型中一种无连接的传输层协议，
不需要建立连接就能直接进行数据发送和接收，属于不可靠的、没有时序的通信，但是UDP协议的实时性比较好，通常用于视频直播相关领域。
*/
package main

import (
	"bytes"
	"fmt"
	"net"
	"time"
)

func main() {
	listen, err := net.ListenUDP("udp", &net.UDPAddr{
		IP:   net.IPv4(0, 0, 0, 0),
		Port: 8888,
	})
	if err != nil {
		fmt.Println("监听失败:", err)
		return
	}
	defer listen.Close()
	for {
		var data [1024]byte
		n, addr, err := listen.ReadFromUDP(data[:]) // 接收数据
		if err != nil {
			fmt.Println("读数据出错:", err)
			continue
		}
		fmt.Printf("收到的数据是:%v\n 客户端地址是:%v\n 读到的字节数:%v\n", string(data[:n]), addr, n)
		_, err = listen.WriteToUDP(data[:n], addr) // 发送数据
		if err != nil {
			fmt.Println("写数据出错:", err)
			continue
		}
	}
}

func handleConn(conn net.Conn) {
	defer conn.Close()
	for {
		var buf [128]byte
		n, err := conn.Read(buf[:])
		if err != nil {
			fmt.Println("读取出错")
			break
		}
		fmt.Println(string(buf[:n]))
		time.Sleep(1 * time.Second)
		conn.Write(bytes.ToUpper(buf[:]))
	}
}
